#include <iostream>
using namespace std;

int main() {
  cout << "c++ version: " << __cplusplus << endl;
}
/*
__cplusplus 是用于检测C++语言版本的预定义宏。
两个下划线前缀说明它是编译器层面定义的。
一个下划线通常是操作系统层面保留的名字。

同一编译器可能支持多种C++标准，通过命令行参数来指定。
比如GCC、Clang都支持`-std=c++XX`参数，其中XX可以是98、03、11、14、17、20、23等。
例如：g++ -std=c++11 version.cpp 编译后，执行结果应为

std     g++-10.3  g++-11.3  clang++-15
======================================
c++98   199711
c++03   199711                          # 版本号与与C++98相同，更新多数为缺陷修复。
c++11   201103
c++14   201402
c++17   201703
c++20   201709*   202002    202002      * 未完全支持。
c++2b   error     202100*   202101*     * 标准还在草案阶段。

指定语言标准超出编译器的支持时会编译错误：
  g++: 错误：unrecognized command-line option ‘-std=c++23’; did you mean ‘-std=c++03’
*/